package net

import (
	"net"
)

type ServerApi interface {
	// Start 启动服务
	// localIp 本机ip,如果全部IP则传入空字符串
	// localPort 本机端口
	Start(localIp string, localPort int) error
	// Stop 停止服务
	Stop()
	// OnDataArrival 数据到达回调
	// clientId 客户端id
	// data 数据
	OnDataArrival(func(clientId string, data []byte))

	// OnClientConnected 客户端链接成功
	OnClientConnected(func(clientId string, conn net.Conn))

	// OnClientStateChange 客户端状态变化回调
	// clientId 客户端id
	// client 客户端
	// state 状态
	OnClientStateChange(func(clientId string, state ConnectState))

	//Send 发送数据到客户端
	//clientId 客户端编码，UPD协议时必须是远程服务器IP和端口格式：IP:Port
	//data:发送数据
	Send(clientId string, data []byte) (int, error)

	//Close 关闭客户端
	Close(clientId string)
}

// CreateServer 创建服务端对象
func CreateServer(t Type) ServerApi {
	if t == Tcp {
		return new(TcpServer)
	} else if t == Udp {
		return new(UdpServer)
	}
	return nil
}
